package com.zh.business.vo.wechat;

import lombok.Data;
import lombok.experimental.Accessors;

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlRootElement;

/**
 * 描述: 微信申请退款查询返回结果类
 *
 * @author: yanglin
 * @Date: 2021-08-18-14:57
 * @Version: 1.0
 */
@Data
@Accessors(chain = true)
@XmlRootElement(name = "xml")
@XmlAccessorType(value = XmlAccessType.FIELD)
public class RefundQueryRep {

    /**
     * 返回状态码
     * SUCCESS/FAIL
     * 此字段是通信标识，非交易标识，交易是否成功需要查看result_code来判断
     * Y
     */
    private String return_code;


    /**
     * 返回信息
     * 当return_code为FAIL时返回信息为错误原因 ，例如
     * 签名失败
     * 参数格式校验错误
     * Y
     */
    private String return_msg;

    /**
     * 业务结果
     * Y
     */
    private String result_code;

    /**
     * 错误代码
     * 当result_code为FAIL时返回错误代码，详细参见下文错误列表
     * N
     */
    private String err_code;

    /**
     * 错误代码描述
     * 当result_code为FAIL时返回错误描述，详细参见下文错误列表
     * N
     */
    private String err_code_des;

    /** 以下字段在return_code为SUCCESS的时候有返回 **/

    /**
     * 公众账号ID
     * 调用接口提交的公众账号ID
     * Y
     */
    private String appid;

    /**
     * 商户号
     * Y
     */
    private String mch_id;

    /**
     * 微信返回的随机字符串
     * Y
     */
    private String nonce_str;

    /**
     * 微信返回的签名值
     * Y
     */
    private String sign;

    /**
     * 订单总退款次数
     * 订单总共已发生的部分退款次数，当请求参数传入offset后有返回
     * N
     */
    private Integer total_refund_count;

    /**
     * 微信支付订单号
     * Y
     */
    private String transaction_id;

    /**
     * 商户订单号
     * 商户系统内部订单号，要求32个字符内，只能是数字、大小写字母_-|*@ ，且在同一个商户号下唯一。
     * Y
     */
    private String out_trade_no;

    /**
     * 订单金额
     * 订单总金额，单位为分
     * Y
     */
    private Integer total_fee;

    /**
     * 应结订单金额
     * 当订单使用了免充值型优惠券后返回该参数，应结订单金额=订单金额-免充值优惠券金额。
     * N
     */
    private Integer settlement_total_fee;

    /**
     * 标价种类
     * 货币类型，符合ISO 4217标准的三位字母代码，默认人民币：CNY，其他值列表详见货币类型
     * N
     */
    private String fee_type;

    /**
     * 现金支付金额
     * 现金支付金额订单现金支付金额，详见支付金额
     * Y
     */
    private Integer cash_fee;

    /**
     * 退款笔数
     * 当前返回退款笔数
     * Y
     */
    private Integer refund_count;

    /**
     * 商户退款单号
     * 商户系统内部的退款单号，商户系统内部唯一，只能是数字、大小写字母_-|*@ ，同一退款单号多次请求只退一笔。
     * Y
     */
    private String out_refund_no_$n;

    /**
     * 微信退款单号
     * Y
     */
    private String refund_id_$n;

    /**
     * 退款渠道
     * ORIGINAL—原路退款
     * BALANCE—退回到余额
     * OTHER_BALANCE—原账户异常退到其他余额账户
     * OTHER_BANKCARD—原银行卡异常退到其他银行卡
     * N
     */
    private String refund_channel_$n;

    /**
     * 申请退款金额
     * 退款总金额,单位为分,可以做部分退款
     * N
     */
    private Integer refund_fee_$n;

    /**
     * 退款金额
     * 退款金额=申请退款金额-非充值代金券退款金额，退款金额<=申请退款金额
     * N
     */
    private Integer settlement_refund_fee_$n;

    /**
     * 代金券类型
     * CASH--充值代金券
     * NO_CASH---非充值优惠券
     * 开通免充值券功能，并且订单使用了优惠券后有返回（取值：CASH、NO_CASH）。$n为下标,$m为下标,从0开始编号，举例：coupon_type_$0_$1
     * N
     */
    private Integer coupon_type_$n_$m;

    /**
     * 总代金券退款金额
     * 代金券退款金额<=退款金额，退款金额-代金券或立减优惠退款金额为现金
     * N
     */
    private Integer coupon_refund_fee_$n;

    /**
     * 退款代金券使用数量
     * 退款代金券使用数量 ,$n为下标,从0开始编号
     * N
     */
    private Integer coupon_refund_count_$n;

    /**
     * 退款代金券ID
     * $n为下标，$m为下标，从0开始编号
     * N
     */
    private String coupon_refund_id_$n_$m;

    /**
     * 单个代金券退款金额
     * $n为下标，$m为下标，从0开始编号
     * N
     */
    private Integer coupon_refund_fee_$n_$m;

    /**
     * 退款状态：
     * SUCCESS—退款成功
     * REFUNDCLOSE—退款关闭。
     * PROCESSING—退款处理中
     * CHANGE—退款异常，退款到银行发现用户的卡作废或者冻结了，导致原路退款银行卡失败，可前往商户平台
     * （pay.weixin.qq.com）-交易中心，手动处理此笔退款。$n为下标，从0开始编号。
     * Y
     */
    private String refund_status_$n;

    /**
     * 退款资金来源
     * REFUND_SOURCE_RECHARGE_FUNDS---可用余额退款/基本账户
     * REFUND_SOURCE_UNSETTLED_FUNDS---未结算资金退款
     * $n为下标，从0开始编号。
     * N
     */
    private String refund_account_$n;

    /**
     * 退款入账账户
     * 取当前退款单的退款入账方
     * 1）退回银行卡：
     * {银行名称}{卡类型}{卡尾号}
     * 2）退回支付用户零钱:
     * 支付用户零钱
     * 3）退还商户:
     * 商户基本账户
     * 商户结算银行账户
     * 4）退回支付用户零钱通:
     * 支付用户零钱通
     * Y
     */
    private String refund_recv_accout_$n;

    /**
     * 退款成功时间
     * 退款成功时间，当退款状态为退款成功时有返回。$n为下标，从0开始编号。
     * N
     */
    private String refund_success_time_$n;


    /**
     * 错误码
     * SYSTEMERROR	接口返回错误	系统超时	请尝试再次掉调用API。
     * REFUNDNOTEXIST	退款订单查询失败	订单号错误或订单状态不正确	请检查订单号是否有误以及订单状态是否正确，如：未支付、已支付未退款
     * INVALID_TRANSACTIONID	无效transaction_id	请求参数未按指引进行填写	请求参数错误，检查原交易号是否存在或发起支付交易接口返回失败
     * PARAM_ERROR	参数错误	请求参数未按指引进行填写	请求参数错误，请检查参数再调用退款申请
     * APPID_NOT_EXIST	APPID不存在	参数中缺少APPID	请检查APPID是否正确
     * MCHID_NOT_EXIST	MCHID不存在	参数中缺少MCHID	请检查MCHID是否正确
     * REQUIRE_POST_METHOD	请使用post方法	未使用post传递参数 	请检查请求参数是否通过post方法提交
     * SIGNERROR	签名错误	参数签名结果不正确	请检查签名参数和方法是否都符合签名算法要求
     * XML_FORMAT_ERROR	XML格式错误	XML格式错误	请检查XML参数格式是否正确
     */
}
